<?php

namespace app\admin\controller;

use app\common\model\Admin as AdminModel;
use think\Controller;
use think\Request;
use think\facade\Session;
use think\facade\Cookie;
use think\captcha\Captcha;
use ryan\Rsa;

// 登录
class Login extends Controller
{
    /**
     * 显示视图
     *
     * @return \think\Response
     */
    public function index()
    {
        // 判断是否自动登录
        if (Cookie::has('adminname') && Cookie::has('adminpassword')) { // 自动登录
            // 获取单个数据
            $data = AdminModel::where('name', addslashes(Cookie::get('adminname')))->find();

            // 判断是否存在
            if ($data) {    // 存在
                // 实例化RSA
                $rsa = new Rsa();
                
                // 解密密码
                $cookie_password = $rsa->decryption(Cookie::get('adminpassword'));
                $data_password = $rsa->decryption($data['password']);

                // 判断密码是否匹配
                if ($cookie_password === $data_password) {
                    // 删除密码
                    unset($data['password']);

                    // 保存数据到SESSION
                    Session::set('admininfo', $data);

                    // 重定向
                    $this->redirect(Url('admin/Index/index'));
                } else {    // 不匹配
                    // 删除Cookie数据
                    Cookie::delete('adminname');
                    Cookie::delete('adminpassword');

                    // 关闭模板布局
                    $this->view->engine->layout(false);

                    // 不带参数视图渲染
                    return $this->fetch();
                }
            } else {    // 不存在
                // 删除Cookie数据
                Cookie::delete('adminname');
                Cookie::delete('adminpassword');

                // 关闭模板布局
                $this->view->engine->layout(false);

                // 不带参数视图渲染
                return $this->fetch();
            }
        } else {    // 不自动登录
            // 关闭模板布局
            $this->view->engine->layout(false);

            // 不带参数视图渲染
            return $this->fetch();
        }
    }

    /**
     * 登录
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function login(Request $request)
    {
        // 获取POST数据
        $post = $request->post();

        // 校验验证码
        if (captcha_check($post['verify'])) {   // 验证码正确
            // 获取单个数据
            $data = AdminModel::where('name', addslashes($post['name']))->find();
            // 判断数据是否存在
            if($data) { // 数据存在
                // 判断状态是否启用
                if ($data['status'] === 1) {    // 管理员启用
                    // 实例化RSA
                    $rsa = new Rsa();
                    // 解密密码
                    $post['password'] = $rsa->decryption($post['password']);
                    $data['password'] = $rsa->decryption($data['password']);
                    // 判断密码是否正确
                    if($post['password'] === $data['password']) {
                        // 判断是否记住密码
                        if(isset($post['remember'])) {
                            // 保存用户名密码到COOKIE
                            Cookie::set('adminname', $data['name'], 604800);
                            Cookie::set('adminpassword', $rsa->encryption($data['password']), 604800);
                        }
                        // 删除密码
                        unset($data['password']);
                        // 保存数据到SESSION
                        Session::set('admininfo', $data);
                        // 返回Json数据
                        return json(['message' => '登录成功', 'type' => 'success', 'state' => 200]);
                    } else {    // 密码错误
                        // 返回Json数据
                        return json(['message' => '输入的密码有误', 'type' => 'error', 'state' => 400]);
                    }
                } else {    // 管理员已停用
                    // 返回Json数据
                    return json(['message' => '该管理员已停用', 'type' => 'error', 'state' => 400]);
                }
            }else { // 数据不存在
                // 返回Json数据
                return json(['message' => '登录名不存在', 'type' => 'error', 'state' => 400]);
            }
        } else {   // 验证码错误
            // 返回Json数据
            return json(['message' => '输入的验证码有误', 'type' => 'error', 'state' => 401]);
        }
    }

    /**
     * 验证码
     *
     * @return \think\Response
     */
    public function verify()
    {
        // 实例化验证码
        $captcha = new Captcha();
        // 验证码字体大小
        $captcha->fontSize = 30;
        // 验证码长度
        $captcha->length = 4;
        // 关闭验证码杂点
        $captcha->useNoise = false;
        // 关闭混验证码淆曲线
        $captcha->useCurve = false;
        // 返回验证码
        return $captcha->entry();    
    }

    /**
     * 退出登录
     *
     * @return \think\Response
     */
    public function logout()
    {
        // Session删除管理员信息
        Session::delete('admininfo');

        // 判断是否保存Cookie
        if(Cookie::has('adminname') || Cookie::has('adminpassword')) {  // 保存
            // 删除Cookie数据
            Cookie::delete('adminname');
            Cookie::delete('adminpassword');
        }

        // 重定向
        $this->redirect(Url('admin/Login/index') . '?logout');
    }
}